#include "logger.h"
#include <memory>

namespace loger {

bool isLogLevelEnabled(LogLevel currentLevel, LogLevel minimumLevel) {
    return static_cast<int>(currentLevel) >= static_cast<int>(minimumLevel);
} 

void loger::Logger::setLogLevel(LogLevel level)
{ 
    logLevel_ = level; 
}
  
void loger::Logger::log(LogLevel level, const std::string& message) {
    if (!isLogLevelEnabled(level, logLevel_)) {
        return;
        }
    string formattedMessage = formatter_->format(level, message);
    for (auto& appender : appenders_) {
        appender->write(formattedMessage);
        }
}

// 初始化静态成员变量
std::unordered_map<std::string, loger::Logger> loger::LoggerManager::loggers;

//创建一个日志记录器
Logger& LoggerManager::getLogger(const std::string& name) {
    auto it = LoggerManager::loggers.find(name); // 显式引用 LoggerManager::loggers
    if (it == LoggerManager::loggers.end()) {
        // 如果日志记录器不存在，则创建一个新的
        auto formatter = std::make_shared<loger::SimpleFormatter>(); // 显式指定命名空间
        auto consoleAppender = std::make_shared<loger::ConsoleAppender>();
        Logger logger(formatter, {consoleAppender}); // 正确构造 Logger 对象
        LoggerManager::loggers[name] = logger;
    }
    return LoggerManager::loggers[name];
}

} // namespace loger